package co.edu.uniquindio.dao;

import java.io.Serializable;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
/**
 * Dao implementation class for Dao: Dao 
 * esta Dao me permite hacer todo el manejo con la BD
 * de la informacion concernientes a un Dao
 * @author Andres  Felipe Abril
 * @author Luis Enrique Robledo
 */
public abstract class Dao <Entidad,Llave extends Serializable> 
{	
	
	protected abstract Class<Entidad> getEntityClass();

	@PersistenceContext(unitName="Subasta")
	protected EntityManager entityManager;
	
	public void insert(Entidad entidad)
	{
	      entityManager.persist(entidad);
	}
	public void update(Entidad entidad){
	      entityManager.merge(entidad);
	}
	public void remove(Entidad entidad) {
        entityManager.remove(entityManager.merge(entidad));
    }
	public Entidad findByKey(Llave llave){
	      return entityManager.find(getEntityClass(), llave);
	}
	public List<Entidad> getAll() {
	      return entityManager.createQuery(
	            "select entidad from " + getEntityClass().getSimpleName()
	            + " entidad ", getEntityClass()).getResultList();
	}
	public List<Entidad> select(String condicion) {
	      return entityManager.createQuery(
	            "select entidad from " + getEntityClass().getSimpleName()+ " entidad "
	            + ("".equals(condicion) ? "" : (condicion == null ? ""
	            : " where " + condicion)), getEntityClass()).getResultList();
	}


}
